#!/usr/bin/env python3
"""
专注时钟应用初始化脚本
用途: 创建必要的目录和初始化数据库
"""

import os
import sys
import shutil
import subprocess
from pathlib import Path

def main():
    print("========= 专注时钟应用初始化 =========")
    
    # 1. 确保 .env 文件存在
    if not os.path.exists('.env'):
        print("创建 .env 文件...")
        if os.path.exists('.env.example'):
            shutil.copy('.env.example', '.env')
            print("已从 .env.example 创建 .env 文件，请根据需要修改")
        else:
            print("错误: 找不到 .env.example 文件")
            return 1
    
    # 2. 检查虚拟环境
    if not (os.path.exists('venv') or os.path.exists('env')):
        print("正在创建虚拟环境...")
        try:
            subprocess.run(['python', '-m', 'venv', 'venv'], check=True)
            print("虚拟环境已创建")
        except subprocess.CalledProcessError:
            print("错误: 创建虚拟环境失败")
            return 1
    
    # 3. 安装依赖
    print("安装依赖项...")
    if sys.platform == 'win32':
        pip_path = os.path.join('venv', 'Scripts', 'pip')
    else:
        pip_path = os.path.join('venv', 'bin', 'pip')
    
    try:
        subprocess.run([pip_path, 'install', '-r', 'requirements.txt'], check=True)
        print("依赖项已安装")
    except subprocess.CalledProcessError:
        print("错误: 安装依赖项失败")
        return 1
    
    # 4. 提示用户创建数据库
    print("\n请确保MySQL服务已启动，并执行以下命令创建数据库:")
    print("mysql -u root -p < db_init.sql")
    
    # 等待用户确认
    input("按Enter键继续...")
    
    # 5. 初始化数据库
    print("初始化数据库...")
    if sys.platform == 'win32':
        flask_path = os.path.join('venv', 'Scripts', 'flask')
    else:
        flask_path = os.path.join('venv', 'bin', 'flask')
    
    try:
        # 初始化迁移仓库
        if not os.path.exists('migrations'):
            subprocess.run([flask_path, 'db', 'init'], check=True)
        
        # 创建迁移脚本
        subprocess.run([flask_path, 'db', 'migrate', '-m', 'Initial migration'], check=True)
        
        # 应用迁移
        subprocess.run([flask_path, 'db', 'upgrade'], check=True)
        
        print("数据库初始化完成")
    except subprocess.CalledProcessError:
        print("错误: 数据库初始化失败")
        return 1
    
    print("\n========= 初始化完成 =========")
    print("现在可以通过以下命令启动应用:")
    if sys.platform == 'win32':
        print("venv\\Scripts\\flask run")
    else:
        print("source venv/bin/activate && flask run")
    
    return 0

if __name__ == "__main__":
    sys.exit(main()) 